<?php
session_start();

class MY_Controller extends CI_Controller {
	// Variable utilizada para saber si el usuario actualmente logueado es administrador
	var $userIsAdmin = FALSE;
	
	public function __construct()
    {
    	parent::__construct();
		
		if(isset($_SESSION[$this->template->getRolSessionName()])) {
			$this->userIsAdmin = $this->template->currentUserIsAdmin($_SESSION[$this->template->getRolSessionName()]);
		}
	}
	
	/**
	 * Carga las vistas de acuerdo a cierto orden establecido para el sitio actual (cabecera, cuerpo, pie)
	 */
	protected function _loadViews($view, $dataView, $cargaCompleta = TRUE)
	{	
		if(!isset($dataView['title']) || $dataView['title'] == '') $dataView['title'] = $this->pageTitle;
        
		// Utilizado en la vista encargada de mostrar el inicio o cierre de sesión
		$dataView['username'] = '';
		$dataView['user_rol'] = '';
		
		$usuarioLogueado = FALSE;
		if(!isset($_SESSION[$this->template->getProyectSessionName()])) {
			$view = $this->template->getLoginView();
		}
		else {
			$dataView['urlLogin'] = 'login/logout';
			$dataView['username'] = $_SESSION[$this->template->getUsernameSessionName()];
			$dataView['user_rol'] = $_SESSION[$this->template->getRolSessionName()];
			$usuarioLogueado = TRUE;
		}
		
		if($cargaCompleta)
		{
			$headerView = $this->template->getHeaderView();
			$footerView = $this->template->getFooterView();
			if($usuarioLogueado) $menuView = $this->template->getMenuView($_SESSION[$this->template->getRolSessionName()]);
			else $menuView = '';
			
			if($headerView != '') $this->load->view($headerView, $dataView);
			if($menuView != '') $this->load->view($menuView, $dataView);
		}

		if(is_array($view)) {
			foreach ($view as $simple_view) {
				if($simple_view != '') $this->load->view($simple_view, $dataView);
			}
		}
		else {
			if($view != '') $this->load->view($view, $dataView);
		}
		
		if($cargaCompleta) { if($footerView != '') $this->load->view($footerView, $dataView); }
	}

	
	/**
	 * Verifica si el usuario puede realizar o no una acción de acuerdo a su rol.
	 * 
	 * Recibe como parámetros el controlador y la función a la que se desean acceder para validar los permisos del usuario actual.
	 */	
	protected function permitted($controller, $function) {
		$permitted = FALSE;
		
		if(isset($_SESSION[$this->template->getPermissionSessionName()])) {
			// Obtengo los permisos para el usuario actual según su rol
			$permissions = $_SESSION[$this->template->getPermissionSessionName()];
			if(is_array($permissions)) {
				foreach($permissions as $perm) {
					$arregloPermiso = explode('/', $perm);
					if(count($arregloPermiso) > 1) {
						$controlador = $arregloPermiso[0];
						$funcion = $arregloPermiso[1];
						// El formato de los permisos es controlador/funcion. Si el controlador coindice, valido sus permisos
						if($controlador === $controller) {
							if($funcion === '*') return TRUE; // Si el permiso es controlador/* significa que tiene acceso a todas las acciones
							else {
								$metodo = $controller . '/' . $function;
								if ($perm === $metodo) return TRUE;
							}
						}
					}
				}
			}
		}
		return $permitted;
	}
	
	/**
	 * Carga una vista default cuando un usuario sin permisos intenta acceder a una vista prohibida.
	 */
	protected function loadForbiddenView() {
		$dataView['title'] = $this->template->getMsgForbidden();
		$view = $this->template->getHomeView();
		
		$this->_loadViews($view, $dataView);
	}
	
	protected function sendMail($to, $from_name, $from_mail, $subject, $message)
	{
		$this->load->library('mail');
		return $this->mail->sendMail($to, $from_name, $from_mail, $subject, $message);
	}

	public function borradoPosible($id_elemento)
	{	
		// La función está IMPRIMIENDO la respuesta, para que pueda obtenerse desde AJAX
		if($this->validarEliminacion($id_elemento)) echo TRUE;
		else echo FALSE;
	}
}